#include "serialui.h"

#include "ui_serialui.h"





serialui::serialui(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::serialui)
{
    ui->setupUi(this);
    myCom = new Posix_QextSerialPort("ttySAC3",QextSerialBase::Polling);//,/dev/ttyS0

    ui->pushButton_open->setEnabled(false);//开始“open”按钮不可用
    //ui->pushButton_send->setEnabled(false); //开始“发送数据”按钮不可用
    ui->lineEdit_port->setEnabled(false);
    ui->comboBox_baud->setEnabled(false);
    ui->comboBox_data->setEnabled(false);
    ui->comboBox_parity->setEnabled(false);
    ui->comboBox_stop->setEnabled(false);

}

serialui::~serialui()
{
    delete ui;
}





void serialui::on_pushButton_open_clicked()
{
    QString portName=ui->lineEdit_port->text();
    myCom = new Posix_QextSerialPort(portName,QextSerialBase::Polling);

    //定义串口对象，并传递参数，在构造函数里对其进行初始化

    myCom ->open(QIODevice::ReadWrite); //打开串口



    //设置波特率

    if(ui->comboBox_baud->currentText()==tr("115200"))

        myCom->setBaudRate(BAUD115200);
    else if(ui->comboBox_baud->currentText()==tr("19200"))
        myCom->setBaudRate(BAUD19200);
    else if(ui->comboBox_baud->currentText()==tr("9600"))
        myCom->setBaudRate(BAUD9600);
    else if(ui->comboBox_baud->currentText()==tr("2400"))
        myCom->setBaudRate(BAUD2400);

    //设置数据位

    if(ui->comboBox_data->currentText()==tr("8"))

        myCom->setDataBits(DATA_8);
    else if(ui->comboBox_data->currentText()==tr("7"))
        myCom->setDataBits(DATA_7);
    else if(ui->comboBox_data->currentText()==tr("6"))
        myCom->setDataBits(DATA_6);
    else if(ui->comboBox_data->currentText()==tr("5"))
        myCom->setDataBits(DATA_5);

    //设置奇偶校验

    if(ui->comboBox_parity->currentText()=="none")

        myCom->setParity(PAR_NONE);
    else if(ui->comboBox_parity->currentText()=="odd")
        myCom->setParity(PAR_ODD);
    else if(ui->comboBox_parity->currentText()=="even")
        myCom->setParity(PAR_EVEN);

    //设置停止位

    if(ui->comboBox_stop->currentText()==tr("1"))

        myCom->setStopBits(STOP_1);
    else if(ui->comboBox_stop->currentText()==tr("2"))
        myCom->setStopBits(STOP_2);

    //设置数据流控制，我们使用无数据流控制的默认设置

    myCom->setFlowControl(FLOW_OFF);

    //设置延时

    myCom->setTimeout(10);
/*
    connect(myCom,SIGNAL(readyRead()),this,SLOT(receive_data()));

*/
    readTimer = new QTimer(this);
    readTimer->start(100);
    connect(readTimer,SIGNAL(timeout()),this,SLOT(receive_data()));

    //打开串口后“打开串口”

    //设置关闭串口后各个组合框bu可用

    ui->pushButton_open->setEnabled(false);

    ui->lineEdit_port->setEnabled(false);
    ui->comboBox_baud->setEnabled(false);
    ui->comboBox_data->setEnabled(false);
    ui->comboBox_parity->setEnabled(false);
    ui->comboBox_stop->setEnabled(false);

    ui->pushButton_close->setEnabled(true);

}

void serialui::on_pushButton_send_clicked()
{
    //以ASCII码形式将行编辑框中的数据写入串口

    myCom->write(ui->lineEdit_send->text().toLatin1());

}

QByteArray serialui::receive_data()
{
    //读取串口缓冲区的所有数据给临时变量temp

    QByteArray temp;

    temp=myCom->readAll();  // QByteArray


    //将串口的数据显示在窗口的文本浏览器中
    ui->textBrowser->insertPlainText(temp);
    return temp;
}



void serialui::on_pushButton_close_clicked()
{
    //关闭串口

    myCom->close();
    




    ui->pushButton_open->setEnabled(true);//关闭串口后“打开串口”按钮可用
    ui->pushButton_send->setEnabled(true);//关闭串口后“发送数据”按钮不可用
    ui->pushButton_close->setEnabled(false);//关闭串口后“关闭串口”按钮不可用

    //设置关闭串口后各个组合框可用

    ui->lineEdit_port->setEnabled(true);

    ui->comboBox_baud->setEnabled(true);
    ui->comboBox_data->setEnabled(true);
    ui->comboBox_parity->setEnabled(true);
    ui->comboBox_stop->setEnabled(true);
}

void serialui::on_pushButton_exit_clicked()
{
    this->close();
}
